/* ESP32C3 GPIO Driver Header */

#ifndef __GPIO_H__
#define __GPIO_H__

#include <stdint.h>

/* GPIO pins definition */
typedef enum {
    GPIO_NUM_0 = 0,
    GPIO_NUM_1,
    GPIO_NUM_2,
    GPIO_NUM_3,
    GPIO_NUM_4,
    GPIO_NUM_5,
    GPIO_NUM_6,
    GPIO_NUM_7,
    GPIO_NUM_8,
    GPIO_NUM_9,
    GPIO_NUM_10,
    GPIO_NUM_11,
    GPIO_NUM_12,
    GPIO_NUM_13,
    GPIO_NUM_14,
    GPIO_NUM_15,
    GPIO_NUM_MAX
} gpio_num_t;

/* GPIO direction */
typedef enum {
    GPIO_MODE_INPUT = 0,
    GPIO_MODE_OUTPUT,
    GPIO_MODE_INPUT_OUTPUT
} gpio_mode_t;

/* GPIO pull mode */
typedef enum {
    GPIO_PULLUP_DISABLE = 0,
    GPIO_PULLUP_ENABLE,
    GPIO_PULLDOWN_DISABLE,
    GPIO_PULLDOWN_ENABLE
} gpio_pull_mode_t;

/* GPIO functions */
void rt_gpio_init(void);
void rt_gpio_set_mode(gpio_num_t gpio_num, gpio_mode_t mode);
void rt_gpio_set_pull_mode(gpio_num_t gpio_num, gpio_pull_mode_t pull_mode);
void rt_gpio_set_level(gpio_num_t gpio_num, uint8_t level);
uint8_t rt_gpio_get_level(gpio_num_t gpio_num);

#endif /* __GPIO_H__ */
